package com.itouch.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * cocoaSJ
 */
public class PatternUtil {

    /**
     * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
     * 联通：130、131、132、152、155、156、185、186
     * 电信：133、153、180、189、（1349卫通）
     *
     * @param s
     * @return
     */
    public static boolean isPhone(String s) {
        Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
        Matcher m = p.matcher(s);
        return m.matches();
    }

//http://jingyan.baidu.com/article/624e74599410d634e8ba5a0a.html


    public static boolean isBankCard(String s) {
        Pattern p = Pattern.compile("^\\d{16,19}$");
        Matcher m = p.matcher(s);
        return m.matches();
    }




        /**
         * 校验银行卡卡号
         * @param cardId
         * @return
         */
        public static boolean checkBankCard(String cardId) {
            char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
            if (bit ==  'N' ){
                return   false ;
            }
            return  cardId.charAt(cardId.length() -  1 ) == bit;
        }

        /**
         * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
         * @param nonCheckCodeCardId
         * @return
         */
        public static char getBankCardCheckCode(String nonCheckCodeCardId) {
            if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
                    || !nonCheckCodeCardId.matches("//d+")) {
                return   'N' ;
            }
            char[] chs = nonCheckCodeCardId.trim().toCharArray();
            int luhmSum = 0;
            for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
                int k = chs[i] - '0';
                if(j % 2 == 0) {
                    k *= 2;
                    k = k / 10 + k % 10;
                }
                luhmSum += k;
            }
            return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');
        }

}
